package com.baihan.angus.app.game.common.data_center.remote.api;

import com.baihan.angus.app.game.basic.base.BaseResponse;
import com.baihan.angus.app.game.common.bean.response.ClueResponse;
import com.baihan.angus.app.game.common.bean.response.DmClueResponse;
import com.baihan.angus.app.game.common.bean.response.DmManualResponse;
import com.baihan.angus.app.game.common.bean.response.DmMapResponse;
import com.baihan.angus.app.game.common.bean.response.DmPropsResponse;
import com.baihan.angus.app.game.common.bean.response.DmRoleScriptResponse;
import com.baihan.angus.app.game.common.bean.response.DmScriptResponse;
import com.baihan.angus.app.game.common.bean.response.GetScriptResponse;
import com.baihan.angus.app.game.common.bean.response.ManualMenuResponse;
import com.baihan.angus.app.game.common.bean.response.MapResponse;
import com.baihan.angus.app.game.common.bean.response.NoteResponse;
import com.baihan.angus.app.game.common.bean.response.PropResponse;
import com.baihan.angus.app.game.common.bean.response.SceneRenderResponse;
import com.baihan.angus.app.game.common.bean.response.ScriptDetailResponse;
import com.baihan.angus.app.game.common.bean.response.ScriptStepResponse;

import java.util.Map;

import io.reactivex.Observable;
import okhttp3.ResponseBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

public interface ScriptServer {

    /**
     * 获取剧本列表
     *
     * @return
     */
    @GET("api/script")
    Observable<ResponseBody> getScriptList(@QueryMap Map<String, Object> pMap);

    /**
     * 发行剧本列表
     *
     * @return
     */
    @GET("api/script_issue")
    Observable<ResponseBody> getAllScript(@QueryMap Map<String, Object> pMap);

    /**
     * 发行剧本榜单列表
     *
     * @return
     */
    @GET("api/script_issue/default")
    Observable<ResponseBody> getScriptRankList(@QueryMap Map<String, Object> pMap);

    /**
     * 剧本id剧幕详情
     *
     * @return
     */
    @GET("api/script_act/script/{id}/step/{step}")
    Observable<ScriptStepResponse> getScriptStepDetail(@Path("id") String id, @Path("step") int step, @Query("room_sn") String room_sn);

    /**
     * 剧本id剧本相关详情
     *
     * @return
     */
    @GET("api/script_relevant/script/{id}")
    Observable<ScriptDetailResponse> getScriptDetail(@Path("id") String id, @Query("type") String type);

    /**
     * DM手册目录
     *
     * @return
     */
    @GET("api/script_relevant/menu/{id}")
    Observable<ManualMenuResponse> getDmMenu(@Path("id") String id, @Query("type") String type, @Query("room_sn") String room_sn);

    /**
     * DM手册目录主持人手册详情
     *
     * @return
     */
    @GET("api/script_relevant/script/{id}")
    Observable<DmManualResponse> getDmMenuDetail(@Path("id") String id, @Query("type") String type,
                                                 @Query("data") String data, @Query("room_sn") String room_sn);

    /**
     * DM手册目录主持人剧本详情
     *
     * @return
     */
    @GET("api/script_relevant/script/{id}")
    Observable<DmScriptResponse> getDmScriptDetail(@Path("id") String id, @Query("type") String type,
                                                   @Query("data") String data, @Query("room_sn") String room_sn);

    /**
     * DM手册目录主持人线索详情
     *
     * @return
     */
    @GET("api/script_relevant/script/{id}")
    Observable<DmClueResponse> getDmClueDetail(@Path("id") String id, @Query("type") String type,
                                               @Query("data") String data, @Query("room_sn") String room_sn);

    /**
     * DM手册目录主持人道具详情
     *
     * @return
     */
    @GET("api/script_relevant/script/{id}")
    Observable<DmPropsResponse> getDmPropsDetail(@Path("id") String id, @Query("type") String type,
                                                 @Query("data") String data, @Query("room_sn") String room_sn);

    /**
     * DM手册目录主持人地图详情
     *
     * @return
     */
    @GET("api/script_relevant/script/{id}")
    Observable<DmMapResponse> getDmMapDetail(@Path("id") String id, @Query("type") String type,
                                             @Query("data") String data, @Query("room_sn") String room_sn);

    /**
     * 获取DM角色剧本
     *
     * @return
     */
    @GET("api/script_relevant/script/{id}")
    Observable<DmRoleScriptResponse> getDmRoleScript(@Path("id") String id, @Query("type") String type);

    /**
     * 剧本情景渲染
     *
     * @return
     */
    @GET("api/script_relevant/script/{id}")
    Observable<SceneRenderResponse> getSceneRender(@Path("id") String id, @Query("type") String type);

    /**
     * 获取剧本
     *
     * @return
     */
    @GET("api/script_relevant/role/{id}")
    Observable<GetScriptResponse> getScript(@Path("id") String id, @Query("type") String type,
                                            @Query("role_id") String role_id, @Query("sn") String sn, @Query("room_sn") String room_sn);

    /**
     * 发送或公开线索
     *
     * @return
     */
    @POST("api/script_relevant/clue/{id}")
    Observable<BaseResponse> sendClue(@Path("id") String id, @Body Map<String, Object> pMap);

    /**
     * 获取线索
     *
     * @return
     */
    @GET("api/script_relevant/role/{id}")
    Observable<ClueResponse> getClue(@Path("id") String id, @Query("type") String type, @Query("room_sn") String room_sn);

    /**
     * 发送道具
     *
     * @return
     */
    @POST("api/script_relevant/prop/{id}")
    Observable<BaseResponse> sendProp(@Path("id") String id, @Body Map<String, Object> pMap);

    /**
     * 获取道具
     *
     * @return
     */
    @GET("api/script_relevant/role/{id}")
    Observable<PropResponse> getProp(@Path("id") String id, @Query("type") String type, @Query("room_sn") String room_sn);

    /**
     * 使用道具
     *
     * @return
     */
    @POST("api/script_relevant/use_prop")
    Observable<BaseResponse> useProp(@Body Map<String, Object> pMap);

    /**
     * 发送地图
     *
     * @return
     */
    @POST("api/script_relevant/map/{id}")
    Observable<BaseResponse> sendMap(@Path("id") String id, @Body Map<String, Object> pMap);

    /**
     * 获取地图
     *
     * @return
     */
    @GET("api/script_relevant/role/{id}")
    Observable<MapResponse> getMap(@Path("id") String id, @Query("type") String type, @Query("room_sn") String room_sn);

    /**
     * 创建笔记
     *
     * @return
     */
    @POST("api/note")
    Observable<BaseResponse> createNote(@Body Map<String, Object> pMap);

    /**
     * 获取笔记
     *
     * @return
     */
    @GET("api/script_relevant/role/{id}")
    Observable<NoteResponse> getNote(@Path("id") String id, @Query("type") String type, @Query("room_sn") String room_sn);
}
